<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>测试变量作用域</title>
  <script type="text/javascript">
  <!--
	window.alert=function(s){ console.log(s);};
	/*
	function foo() {
		var x = 1;
		function bar() {
			var y = x + 1; // bar可以访问foo的变量x!
			alert(y);
		}
		var z = y + 1; // ReferenceError! foo不可以访问bar的变量y!
		alert(z);
	}
	*/
	alert("调用foo");
	foo();//调用最后一个foo方法
	function foo() {
		var x = 1;
		function bar() {
			var x = 'A';
			alert('x in bar() = ' + x); // 'A'
		}
		alert('x in foo() = ' + x); // 1
		bar();
	}
	function foo() {
		for (var i=0; i<100; i++) {
			//
		}
		i += 100; // 仍然可以引用变量i
		alert("i="+i);
	}
	/*
	function foo() {
		var sum = 0;
		for (let i=0; i<100; i++) {
			sum += i;
		}
		i += 1; // i is not defined
	}*/
	foo();
	//const与let都具有块级作用域
	const PI = 3.14;
	//PI = 3; // 某些浏览器不报错，但是无效果！
	alert(PI);

	//使用名字空间
	// 唯一的全局变量MYAPP:
	var MYAPP = {};
	// 其他变量:
	MYAPP.name = 'myapp';
	MYAPP.version = 1.0;
	// 其他函数:
	MYAPP.foo = function () {
		return 'foo';
	};

	window.alert('调用window.alert()');
	// 把alert保存到另一个变量:
	var old_alert = window.alert;
	// 给alert赋一个新函数:
	window.alert = function () {};
	alert('无法用alert()显示了!');
	// 恢复alert:
	window.alert = old_alert;
	alert('又可以用alert()了!');
  //-->
  </script>
 </head>
 <body>
  
 </body>
</html>
